package com.papers.juan.service;

import com.papers.common.core.domain.PageQuery;
import com.papers.common.core.page.TableDataInfo;
import com.papers.juan.domain.TJuanGenerateDetail;
import com.papers.juan.domain.bean.GenerateSaveBean;
import com.papers.juan.domain.bean.PaperQuestionInfoBean;
import com.papers.juan.domain.bean.QuestionQueryBean;
import com.papers.juan.domain.bean.QuestionTypePropertyBean;
import com.papers.juan.domain.bo.TJuanGenerateBo;
import com.papers.juan.domain.vo.TJuanGenerateDetailVo;
import com.papers.juan.domain.vo.TJuanGenerateVo;

import java.util.Collection;
import java.util.List;

/**
 * 组卷Service口
 *
 * @author papers
 * @date 2022-10-08
 */
public interface ITJuanGenerateService {

    /**
     * 获取题量配比列表
     *
     * @param questionQueryBean 题目查询bean
     * @return 题量配比列表
     */
    List<QuestionTypePropertyBean> queryQuestionCountProportions(QuestionQueryBean questionQueryBean);

    /**
     * 获取自动生成题目列表
     *
     * @param generateId 组卷id
     * @return 是否生成成功
     */
    Boolean autoGeneratePaper(String generateId);

    /**
     * 获取多试卷的题量配比列表
     *
     * @param paperIds 试卷ids
     * @return 题量配比列表
     */
    List<QuestionTypePropertyBean> queryPapersQuestionCountProportions(List<String> paperIds);

    /**
     * 查询组卷
     */
    GenerateSaveBean queryById(String generateId);

    /**
     * 获取组卷列表
     *
     * @param bo        过滤条件
     * @param pageQuery 分页条件
     * @return 组卷列表
     */
    TableDataInfo<TJuanGenerateVo> queryJuanGenerateList(TJuanGenerateBo bo, PageQuery pageQuery);

    /**
     * 根据组卷id获取组卷详情
     *
     * @param generateId 组卷id
     * @return 组卷详情
     */
    TJuanGenerateDetailVo queryJuanGenerateDetailById(String generateId);

    /**
     * 查询组卷列表
     */
    List<TJuanGenerateVo> queryList(TJuanGenerateBo bo);

    /**
     * 新增组卷
     */
    Boolean insertByBo(GenerateSaveBean saveBean);

    /**
     * 修改组卷
     */
    Boolean updateByBo(GenerateSaveBean saveBean);

    /**
     * 校验并批量删除组卷信息
     */
    Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);

    /**
     * 生成单张试卷方法
     *
     * @param paperQuestionInfoJsons 试卷题目信息json列表
     * @param allQuestions           所有题目
     * @param generateDetails        筛选条件
     * @return 试卷总分
     */
    Integer generateSinglePaperMethod(List<String> paperQuestionInfoJsons, List<PaperQuestionInfoBean> allQuestions,
                                      List<TJuanGenerateDetail> generateDetails);

}
